// 此页面写路由守卫(导航守卫)
import router from './router'
import store from './store'
// import { asyncRoutes } from './router'
// import { getInfo } from '@/api/user'

router.beforeEach(async(to, from, next) => {
  const token = store.state.user.token
  if (token) {
    // 已登录
    if (to.path === '/login') {
      next('/')
    } else {
      // 其他情况放行
      if (!store.state.user.userInfo) {
        await store.dispatch('user/getInfo')
        // 这里是获取完数据的位置
        // 这里就可以进行路由筛选和追加
        // 1.拿到所有的动态路由数组
        // 2.拿到这个用户的menus 数组
        // 通过对动态路由的name存在与menus当中就可以访问,否则就不行
        // menus是用户权限数组  ; routes是最终筛选路由  ; asyncRoutes是全部动态路由数组
        // const menus = store.state.user.userInfo.roles.menus
        // const routes = asyncRoutes.filter(item => menus.includes(item.name))

        // 所有的 actions 都是promise 可以根据内部的return接收数据
        const routes = await store.dispatch('permission/filterRoutes')
        router.addRoutes([
          ...routes,
          // 404 page must be placed at the end !!!
          { path: '*', redirect: '/404', hidden: true }
        ])
        console.log('权限路由', routes)
        // 这里刚刚追加完路由, 但是匹配过程是不会自动重新触发, 原来看不见的页面还是看不见
        // 需要手动, 相同的地址, 跳转一次, 重新触发匹配流程
        next(to.path)
        return
      }
      next()
    }
  } else {
    const whiteList = ['/login', '/404']
    // if(whiteList.indexOf(to.path) === -1)
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})
